//---------------------------------------------------------------------------
#pragma hdrstop
#include "classeListaCircularDuplamenteLigadaStl.h"
//---------------------------------------------------------------------------

#pragma package(smart_init)

ListaStl::ListaStl()
{
	lstCDL = new list<String>;
	iteratorAtual = NULL;
}
//---------------------------------------------------------------------------
ListaStl::~ListaStl()
{
	delete lstCDL;
	lstCDL = NULL;
}
//---------------------------------------------------------------------------
void ListaStl::insereInicio(String n)
{
	lstCDL->push_front(n);
	iteratorAtual = lstCDL->begin();	
}
//---------------------------------------------------------------------------
void ListaStl::insereX(String x, int posicao)
{
	if (lstCDL->size() > 0)
	{
		int j;
		iteratorAtual = lstCDL->begin();

		if ((posicao) <= getTamanho())
		{
			for (j = 0; j < posicao; j++)
			{
				iteratorAtual++;
			}
			lstCDL->insert(iteratorAtual, x);
		}
	}
	else
	{
        insereInicio(x);
    }
	iteratorAtual = lstCDL->begin();
}
//---------------------------------------------------------------------------
void ListaStl::insereFinal(String f)
{
	lstCDL->push_back(f);
	iteratorAtual = lstCDL->begin();	
}
//---------------------------------------------------------------------------
String ListaStl::consultaInicio()
{
	iteratorAtual = lstCDL->begin();
	return (*iteratorAtual);
}
//---------------------------------------------------------------------------
String ListaStl::consultaX(int posicao)
{
	int j;    	
	iteratorAtual = lstCDL->begin();
	
	if ((posicao) <= getTamanho())
	{
		for (j = 0; j < posicao; j++) 
		{
			iteratorAtual++;	
		}		
	}
	else
	{
		iteratorAtual = lstCDL->end();
		iteratorAtual--;
	}
	return (*iteratorAtual);
}
//---------------------------------------------------------------------------
String ListaStl::consultaAtual()
{
	if ((lstCDL->size() > 0) && (iteratorAtual != NULL))
	{
		return (*iteratorAtual);
	}
}
//---------------------------------------------------------------------------
String ListaStl::consultaFinal()
{
	iteratorAtual = lstCDL->end();
	iteratorAtual--;
	return (*iteratorAtual);
}
//---------------------------------------------------------------------------
String ListaStl::consultaAnterior()
{
	if (iteratorAtual == lstCDL->begin()) 
	{
		iteratorAtual = lstCDL->end();
	}
	iteratorAtual--;
	return (*iteratorAtual);	
}
//---------------------------------------------------------------------------
String ListaStl::consultaProximo()
{
	iteratorAtual++;
	if (iteratorAtual == lstCDL->end()) 
	{
		iteratorAtual = lstCDL->begin();
	}
	return (*iteratorAtual);	
}
//---------------------------------------------------------------------------
void ListaStl::removeInicio()
{
	 lstCDL->pop_front();
	 iteratorAtual = lstCDL->begin();
}
//---------------------------------------------------------------------------
void ListaStl::removeX(int posicao)
{
	int j;              	
	iteratorAtual = lstCDL->begin();
	
	if ((posicao) <= getTamanho())
	{
		for (j = 0; j < posicao; j++) 
		{
			iteratorAtual++;	
		}
		lstCDL->erase(iteratorAtual);
	}
	iteratorAtual = lstCDL->begin();
}
//---------------------------------------------------------------------------
void ListaStl::removeFinal()
{
	lstCDL->pop_back();
	iteratorAtual = lstCDL->begin();
}
//---------------------------------------------------------------------------
void ListaStl::limpar()
{
	lstCDL->clear();
	iteratorAtual = NULL;
}
//---------------------------------------------------------------------------
int ListaStl::getTamanho()
{
	return lstCDL->size();
}
//---------------------------------------------------------------------------
int ListaStl::getPosicao_Atual()
{
	int j;
	list<String>::iterator iteratorAux;

	j = 0;
	
	for (iteratorAux = lstCDL->begin(); iteratorAux != iteratorAtual; iteratorAux++)
	{
		j++;
	}
	return j;
}
//---------------------------------------------------------------------------
void ListaStl::listar(TStrings *itens)
{
	if (lstCDL->size() > 0)
	{
		list<String>::iterator iteratorAux;
		iteratorAux = lstCDL->begin();
		itens->Clear();

		while (iteratorAux != lstCDL->end())
		{
			itens->Append(*iteratorAux);
			iteratorAux++;
		}
	}
}
//---------------------------------------------------------------------------
void ListaStl::altera(String v)
{
	(*iteratorAtual) = v;
}
//---------------------------------------------------------------------------
void ListaStl::removeFaixa(int min, int max)
{

}
//----------------------------------------------
void ListaStl::remove(String v)
{
	lstCDL->remove(v);
	iteratorAtual = lstCDL->begin();
}
//-------------------------------------------------------------------
String ListaStl::consultaMin()
{
	
}
//---------------------------------------------------------------------------
String ListaStl::consultaMax()
{

}
//---------------------------------------------------------------------------
String ListaStl::buscaValor(String v)
{
	int j;    	
	iteratorAtual = lstCDL->begin();

	while (iteratorAtual != lstCDL->end()) 
	{
		if ((*iteratorAtual) == v)
		{
			break;
        }
	}		

	if (iteratorAtual == lstCDL->end())
	{
		return "";
	}
	else
	{
    	return (*iteratorAtual);
	}	
}
